
module PDM #(
	parameter DW = 8 //数据位宽
)(
	input wire clk,// 时钟
	input wire rst_n,// 低电平复位，异步复位同步释放
	input wire [DW-1:0] din, //数据输入
	output wire pwm_out, //PWM输出
	output wire fpdm_out //伪PDM输出
);
reg [DW-1:0] cnt;//PWM计数器
wire [DW-1:0] neg_cnt;//计数器反转输出

always @(posedge clk or negedge rst_n) begin//计数器
	if(~rst_n) begin
		cnt <= 0;
	end 
	else begin
		cnt <= cnt + 1;
	end
end

genvar i;//反转
generate
	for (i = 0; i < DW; i++) begin
		assign neg_cnt[i] = cnt[DW-1-i];
	end
endgenerate

//比较输出
assign pwm_out = (cnt<=din)?1'b1:1'b0;
assign fpdm_out = (neg_cnt<=din)?1'b1:1'b0;

endmodule